package com.ecoolex.hotel.saas.entity;

import com.ecoolex.framework.common.annotation.Description;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import org.springframework.lang.NonNull;

/**
 *
 *   预售券<br>
 *<br>
 * 数据表： presale_coupon
 *
 */
@Description({"预售券"})
public class PresaleCoupon implements Serializable {
    public static final Boolean IS_DELETED = Deleted.IS_DELETED.value();

    public static final Boolean NOT_DELETED = Deleted.NOT_DELETED.value();

    /**
     *
     *   预售券Id    <br>
     *<br>
     * 字段名： presale_coupon.PreCouponId
     */
    @Description({"预售券Id", "不能为空", "数据长度: 10"})
    @NonNull
    private Integer preCouponId;

    /**
     *
     *   商户Id    <br>
     *<br>
     * 字段名： presale_coupon.StoreId
     */
    @Description({"商户Id", "不能为空", "数据长度: 10"})
    @NonNull
    private Integer storeId;

    /**
     *
     *   券名称    <br>
     *<br>
     * 字段名： presale_coupon.Name
     */
    @Description({"券名称", "不能为空", "数据长度: 50"})
    @NonNull
    private String name;

    /**
     *
     *   副标题    <br>
     *<br>
     * 字段名： presale_coupon.SubName
     */
    @Description({"副标题", "数据长度: 500"})
    private String subName;

    /**
     *
     *   专柜价格    <br>
     *<br>
     * 字段名： presale_coupon.CounterPrice
     */
    @Description({"专柜价格", "不能为空", "数据长度: 18"})
    @NonNull
    private BigDecimal counterPrice;

    /**
     *
     *   实际价格    <br>
     *<br>
     * 字段名： presale_coupon.RealPrice
     */
    @Description({"实际价格", "不能为空", "数据长度: 18"})
    @NonNull
    private BigDecimal realPrice;

    /**
     *
     *   库存数量    <br>
     *<br>
     * 字段名： presale_coupon.StockNumber
     */
    @Description({"库存数量", "不能为空", "数据长度: 10"})
    @NonNull
    private Integer stockNumber;

    /**
     *
     *   使用库存数量    <br>
     *<br>
     * 字段名： presale_coupon.UsedStockNumber
     */
    @Description({"使用库存数量", "不能为空", "数据长度: 10"})
    @NonNull
    private Integer usedStockNumber;

    /**
     *
     *   销售数量    <br>
     *<br>
     * 字段名： presale_coupon.SaleNumber
     */
    @Description({"销售数量", "不能为空", "数据长度: 10"})
    @NonNull
    private Integer saleNumber;

    /**
     *
     *   开始销售时间    <br>
     *<br>
     * 字段名： presale_coupon.SaleStartTime
     */
    @Description({"开始销售时间", "不能为空", "数据长度: 26"})
    @NonNull
    private Date saleStartTime;

    /**
     *
     *   结束销售时间    <br>
     *<br>
     * 字段名： presale_coupon.SaleEndTime
     */
    @Description({"结束销售时间", "不能为空", "数据长度: 26"})
    @NonNull
    private Date saleEndTime;

    /**
     *
     *   封面图片    <br>
     *<br>
     * 字段名： presale_coupon.CoverImage
     */
    @Description({"封面图片", "数据长度: 100"})
    private String coverImage;

    /**
     *
     *   头图    <br>
     *<br>
     * 字段名： presale_coupon.HeadImage
     */
    @Description({"头图", "数据长度: 2000"})
    private String headImage;

    /**
     *
     *   描述    <br>
     *<br>
     * 字段名： presale_coupon.Description
     */
    @Description({"描述", "数据长度: 500"})
    private String description;

    /**
     *
     *   退款说明    <br>
     *<br>
     * 字段名： presale_coupon.RefundExplain
     */
    @Description({"退款说明", "数据长度: 500"})
    private String refundExplain;

    /**
     *
     *   使用规则    <br>
     *<br>
     * 字段名： presale_coupon.UseRule
     */
    @Description({"使用规则", "数据长度: 500"})
    private String useRule;

    /**
     *
     *   提示备注    <br>
     *<br>
     * 字段名： presale_coupon.Remark
     */
    @Description({"提示备注", "数据长度: 500"})
    private String remark;

    /**
     *
     *   是否可退款：1-可退款；2-不可退款    <br>
     *<br>
     * 字段名： presale_coupon.IsRefund
     */
    @Description({"是否可退款：1-可退款；2-不可退款", "数据长度: 5"})
    private Integer isRefund;

    /**
     *
     *   分销结算方式：1-支付后；2-支付后发放，使用后结算    <br>
     *<br>
     * 字段名： presale_coupon.DistributionSettleType
     */
    @Description({"分销结算方式：1-支付后；2-支付后发放，使用后结算", "数据长度: 5"})
    private Integer distributionSettleType;

    /**
     *
     *   微信分享标题    <br>
     *<br>
     * 字段名： presale_coupon.ShareTitle
     */
    @Description({"微信分享标题", "数据长度: 100"})
    private String shareTitle;

    /**
     *
     *   微信分享描述    <br>
     *<br>
     * 字段名： presale_coupon.ShareDescription
     */
    @Description({"微信分享描述", "数据长度: 500"})
    private String shareDescription;

    /**
     *
     *   状态：1-编辑中； 2-编辑完成；3-上线    <br>
     *<br>
     * 字段名： presale_coupon.Status
     */
    @Description({"状态：1-编辑中； 2-编辑完成；3-上线", "不能为空", "数据长度: 5"})
    @NonNull
    private Integer status;

    /**
     *
     *   逻辑删除    <br>
     *<br>
     * 字段名： presale_coupon.Deleted
     */
    @Description({"逻辑删除", "不能为空", "数据长度: 1"})
    @NonNull
    private Boolean deleted;

    /**
     *
     *   创建用户    <br>
     *<br>
     * 字段名： presale_coupon.CreateUser
     */
    @Description({"创建用户", "不能为空", "数据长度: 50"})
    @NonNull
    private String createUser;

    /**
     *
     *   创建时间    <br>
     *<br>
     * 字段名： presale_coupon.CreateTime
     */
    @Description({"创建时间", "不能为空", "数据长度: 26"})
    @NonNull
    private Date createTime;

    /**
     *
     *   修改用户    <br>
     *<br>
     * 字段名： presale_coupon.UpdateUser
     */
    @Description({"修改用户", "不能为空", "数据长度: 50"})
    @NonNull
    private String updateUser;

    /**
     *
     *   修改时间    <br>
     *<br>
     * 字段名： presale_coupon.UpdateTime
     */
    @Description({"修改时间", "不能为空", "数据长度: 26"})
    @NonNull
    private Date updateTime;

    /**
     *
     *   图文详情    <br>
     *<br>
     * 字段名： presale_coupon.Detail
     */
    @Description({"图文详情", "数据长度: 65535"})
    private String detail;

    private static final long serialVersionUID = 1L;

    /**
     * 获取参数<br><br>
     *
     *   预售券Id    <br>
     *<br>
     * 字段名： presale_coupon.PreCouponId
     */
    public Integer getPreCouponId() {
        return preCouponId;
    }

    /**
     * 设置参数<br><br>
     *
     *   预售券Id<br>
     *<br>
     * 字段名： presale_coupon.PreCouponId
     */
    public void setPreCouponId(Integer preCouponId) {
        this.preCouponId = preCouponId;
    }

    /**
     * 获取参数<br><br>
     *
     *   商户Id    <br>
     *<br>
     * 字段名： presale_coupon.StoreId
     */
    public Integer getStoreId() {
        return storeId;
    }

    /**
     * 设置参数<br><br>
     *
     *   商户Id<br>
     *<br>
     * 字段名： presale_coupon.StoreId
     */
    public void setStoreId(Integer storeId) {
        this.storeId = storeId;
    }

    /**
     * 获取参数<br><br>
     *
     *   券名称    <br>
     *<br>
     * 字段名： presale_coupon.Name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置参数<br><br>
     *
     *   券名称<br>
     *<br>
     * 字段名： presale_coupon.Name
     */
    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   副标题    <br>
     *<br>
     * 字段名： presale_coupon.SubName
     */
    public String getSubName() {
        return subName;
    }

    /**
     * 设置参数<br><br>
     *
     *   副标题<br>
     *<br>
     * 字段名： presale_coupon.SubName
     */
    public void setSubName(String subName) {
        this.subName = subName == null ? null : subName.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   专柜价格    <br>
     *<br>
     * 字段名： presale_coupon.CounterPrice
     */
    public BigDecimal getCounterPrice() {
        return counterPrice;
    }

    /**
     * 设置参数<br><br>
     *
     *   专柜价格<br>
     *<br>
     * 字段名： presale_coupon.CounterPrice
     */
    public void setCounterPrice(BigDecimal counterPrice) {
        this.counterPrice = counterPrice;
    }

    /**
     * 获取参数<br><br>
     *
     *   实际价格    <br>
     *<br>
     * 字段名： presale_coupon.RealPrice
     */
    public BigDecimal getRealPrice() {
        return realPrice;
    }

    /**
     * 设置参数<br><br>
     *
     *   实际价格<br>
     *<br>
     * 字段名： presale_coupon.RealPrice
     */
    public void setRealPrice(BigDecimal realPrice) {
        this.realPrice = realPrice;
    }

    /**
     * 获取参数<br><br>
     *
     *   库存数量    <br>
     *<br>
     * 字段名： presale_coupon.StockNumber
     */
    public Integer getStockNumber() {
        return stockNumber;
    }

    /**
     * 设置参数<br><br>
     *
     *   库存数量<br>
     *<br>
     * 字段名： presale_coupon.StockNumber
     */
    public void setStockNumber(Integer stockNumber) {
        this.stockNumber = stockNumber;
    }

    /**
     * 获取参数<br><br>
     *
     *   使用库存数量    <br>
     *<br>
     * 字段名： presale_coupon.UsedStockNumber
     */
    public Integer getUsedStockNumber() {
        return usedStockNumber;
    }

    /**
     * 设置参数<br><br>
     *
     *   使用库存数量<br>
     *<br>
     * 字段名： presale_coupon.UsedStockNumber
     */
    public void setUsedStockNumber(Integer usedStockNumber) {
        this.usedStockNumber = usedStockNumber;
    }

    /**
     * 获取参数<br><br>
     *
     *   销售数量    <br>
     *<br>
     * 字段名： presale_coupon.SaleNumber
     */
    public Integer getSaleNumber() {
        return saleNumber;
    }

    /**
     * 设置参数<br><br>
     *
     *   销售数量<br>
     *<br>
     * 字段名： presale_coupon.SaleNumber
     */
    public void setSaleNumber(Integer saleNumber) {
        this.saleNumber = saleNumber;
    }

    /**
     * 获取参数<br><br>
     *
     *   开始销售时间    <br>
     *<br>
     * 字段名： presale_coupon.SaleStartTime
     */
    public Date getSaleStartTime() {
        return saleStartTime;
    }

    /**
     * 设置参数<br><br>
     *
     *   开始销售时间<br>
     *<br>
     * 字段名： presale_coupon.SaleStartTime
     */
    public void setSaleStartTime(Date saleStartTime) {
        this.saleStartTime = saleStartTime;
    }

    /**
     * 获取参数<br><br>
     *
     *   结束销售时间    <br>
     *<br>
     * 字段名： presale_coupon.SaleEndTime
     */
    public Date getSaleEndTime() {
        return saleEndTime;
    }

    /**
     * 设置参数<br><br>
     *
     *   结束销售时间<br>
     *<br>
     * 字段名： presale_coupon.SaleEndTime
     */
    public void setSaleEndTime(Date saleEndTime) {
        this.saleEndTime = saleEndTime;
    }

    /**
     * 获取参数<br><br>
     *
     *   封面图片    <br>
     *<br>
     * 字段名： presale_coupon.CoverImage
     */
    public String getCoverImage() {
        return coverImage;
    }

    /**
     * 设置参数<br><br>
     *
     *   封面图片<br>
     *<br>
     * 字段名： presale_coupon.CoverImage
     */
    public void setCoverImage(String coverImage) {
        this.coverImage = coverImage == null ? null : coverImage.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   头图    <br>
     *<br>
     * 字段名： presale_coupon.HeadImage
     */
    public String getHeadImage() {
        return headImage;
    }

    /**
     * 设置参数<br><br>
     *
     *   头图<br>
     *<br>
     * 字段名： presale_coupon.HeadImage
     */
    public void setHeadImage(String headImage) {
        this.headImage = headImage == null ? null : headImage.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   描述    <br>
     *<br>
     * 字段名： presale_coupon.Description
     */
    public String getDescription() {
        return description;
    }

    /**
     * 设置参数<br><br>
     *
     *   描述<br>
     *<br>
     * 字段名： presale_coupon.Description
     */
    public void setDescription(String description) {
        this.description = description == null ? null : description.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   退款说明    <br>
     *<br>
     * 字段名： presale_coupon.RefundExplain
     */
    public String getRefundExplain() {
        return refundExplain;
    }

    /**
     * 设置参数<br><br>
     *
     *   退款说明<br>
     *<br>
     * 字段名： presale_coupon.RefundExplain
     */
    public void setRefundExplain(String refundExplain) {
        this.refundExplain = refundExplain == null ? null : refundExplain.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   使用规则    <br>
     *<br>
     * 字段名： presale_coupon.UseRule
     */
    public String getUseRule() {
        return useRule;
    }

    /**
     * 设置参数<br><br>
     *
     *   使用规则<br>
     *<br>
     * 字段名： presale_coupon.UseRule
     */
    public void setUseRule(String useRule) {
        this.useRule = useRule == null ? null : useRule.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   提示备注    <br>
     *<br>
     * 字段名： presale_coupon.Remark
     */
    public String getRemark() {
        return remark;
    }

    /**
     * 设置参数<br><br>
     *
     *   提示备注<br>
     *<br>
     * 字段名： presale_coupon.Remark
     */
    public void setRemark(String remark) {
        this.remark = remark == null ? null : remark.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   是否可退款：1-可退款；2-不可退款    <br>
     *<br>
     * 字段名： presale_coupon.IsRefund
     */
    public Integer getIsRefund() {
        return isRefund;
    }

    /**
     * 设置参数<br><br>
     *
     *   是否可退款：1-可退款；2-不可退款<br>
     *<br>
     * 字段名： presale_coupon.IsRefund
     */
    public void setIsRefund(Integer isRefund) {
        this.isRefund = isRefund;
    }

    /**
     * 获取参数<br><br>
     *
     *   分销结算方式：1-支付后；2-支付后发放，使用后结算    <br>
     *<br>
     * 字段名： presale_coupon.DistributionSettleType
     */
    public Integer getDistributionSettleType() {
        return distributionSettleType;
    }

    /**
     * 设置参数<br><br>
     *
     *   分销结算方式：1-支付后；2-支付后发放，使用后结算<br>
     *<br>
     * 字段名： presale_coupon.DistributionSettleType
     */
    public void setDistributionSettleType(Integer distributionSettleType) {
        this.distributionSettleType = distributionSettleType;
    }

    /**
     * 获取参数<br><br>
     *
     *   微信分享标题    <br>
     *<br>
     * 字段名： presale_coupon.ShareTitle
     */
    public String getShareTitle() {
        return shareTitle;
    }

    /**
     * 设置参数<br><br>
     *
     *   微信分享标题<br>
     *<br>
     * 字段名： presale_coupon.ShareTitle
     */
    public void setShareTitle(String shareTitle) {
        this.shareTitle = shareTitle == null ? null : shareTitle.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   微信分享描述    <br>
     *<br>
     * 字段名： presale_coupon.ShareDescription
     */
    public String getShareDescription() {
        return shareDescription;
    }

    /**
     * 设置参数<br><br>
     *
     *   微信分享描述<br>
     *<br>
     * 字段名： presale_coupon.ShareDescription
     */
    public void setShareDescription(String shareDescription) {
        this.shareDescription = shareDescription == null ? null : shareDescription.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   状态：1-编辑中； 2-编辑完成；3-上线    <br>
     *<br>
     * 字段名： presale_coupon.Status
     */
    public Integer getStatus() {
        return status;
    }

    /**
     * 设置参数<br><br>
     *
     *   状态：1-编辑中； 2-编辑完成；3-上线<br>
     *<br>
     * 字段名： presale_coupon.Status
     */
    public void setStatus(Integer status) {
        this.status = status;
    }

    public void andLogicalDeleted(boolean deleted) {
        setDeleted(deleted ? Deleted.IS_DELETED.value() : Deleted.NOT_DELETED.value());
    }

    /**
     * 获取参数<br><br>
     *
     *   逻辑删除    <br>
     *<br>
     * 字段名： presale_coupon.Deleted
     */
    public Boolean getDeleted() {
        return deleted;
    }

    /**
     * 设置参数<br><br>
     *
     *   逻辑删除<br>
     *<br>
     * 字段名： presale_coupon.Deleted
     */
    public void setDeleted(Boolean deleted) {
        this.deleted = deleted;
    }

    /**
     * 获取参数<br><br>
     *
     *   创建用户    <br>
     *<br>
     * 字段名： presale_coupon.CreateUser
     */
    public String getCreateUser() {
        return createUser;
    }

    /**
     * 设置参数<br><br>
     *
     *   创建用户<br>
     *<br>
     * 字段名： presale_coupon.CreateUser
     */
    public void setCreateUser(String createUser) {
        this.createUser = createUser == null ? null : createUser.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   创建时间    <br>
     *<br>
     * 字段名： presale_coupon.CreateTime
     */
    public Date getCreateTime() {
        return createTime;
    }

    /**
     * 设置参数<br><br>
     *
     *   创建时间<br>
     *<br>
     * 字段名： presale_coupon.CreateTime
     */
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    /**
     * 获取参数<br><br>
     *
     *   修改用户    <br>
     *<br>
     * 字段名： presale_coupon.UpdateUser
     */
    public String getUpdateUser() {
        return updateUser;
    }

    /**
     * 设置参数<br><br>
     *
     *   修改用户<br>
     *<br>
     * 字段名： presale_coupon.UpdateUser
     */
    public void setUpdateUser(String updateUser) {
        this.updateUser = updateUser == null ? null : updateUser.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   修改时间    <br>
     *<br>
     * 字段名： presale_coupon.UpdateTime
     */
    public Date getUpdateTime() {
        return updateTime;
    }

    /**
     * 设置参数<br><br>
     *
     *   修改时间<br>
     *<br>
     * 字段名： presale_coupon.UpdateTime
     */
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    /**
     * 获取参数<br><br>
     *
     *   图文详情    <br>
     *<br>
     * 字段名： presale_coupon.Detail
     */
    public String getDetail() {
        return detail;
    }

    /**
     * 设置参数<br><br>
     *
     *   图文详情<br>
     *<br>
     * 字段名： presale_coupon.Detail
     */
    public void setDetail(String detail) {
        this.detail = detail == null ? null : detail.trim();
    }

    public enum Deleted {
        NOT_DELETED(new Boolean("false"), "未删除"),
        IS_DELETED(new Boolean("true"), "已删除");

        private final Boolean value;

        private final String name;

        Deleted(Boolean value, String name) {
            this.value = value;
            this.name = name;
        }

        public Boolean getValue() {
            return this.value;
        }

        public Boolean value() {
            return this.value;
        }

        public String getName() {
            return this.name;
        }
    }

    public enum Column {
        preCouponId("PreCouponId", "preCouponId", "INTEGER", false),
        storeId("StoreId", "storeId", "INTEGER", false),
        name("Name", "name", "VARCHAR", true),
        subName("SubName", "subName", "VARCHAR", false),
        counterPrice("CounterPrice", "counterPrice", "DECIMAL", false),
        realPrice("RealPrice", "realPrice", "DECIMAL", false),
        stockNumber("StockNumber", "stockNumber", "INTEGER", false),
        usedStockNumber("UsedStockNumber", "usedStockNumber", "INTEGER", false),
        saleNumber("SaleNumber", "saleNumber", "INTEGER", false),
        saleStartTime("SaleStartTime", "saleStartTime", "TIMESTAMP", false),
        saleEndTime("SaleEndTime", "saleEndTime", "TIMESTAMP", false),
        coverImage("CoverImage", "coverImage", "VARCHAR", false),
        headImage("HeadImage", "headImage", "VARCHAR", false),
        description("Description", "description", "VARCHAR", false),
        refundExplain("RefundExplain", "refundExplain", "VARCHAR", false),
        useRule("UseRule", "useRule", "VARCHAR", false),
        remark("Remark", "remark", "VARCHAR", false),
        isRefund("IsRefund", "isRefund", "INTEGER", false),
        distributionSettleType("DistributionSettleType", "distributionSettleType", "INTEGER", false),
        shareTitle("ShareTitle", "shareTitle", "VARCHAR", false),
        shareDescription("ShareDescription", "shareDescription", "VARCHAR", false),
        status("Status", "status", "INTEGER", true),
        deleted("Deleted", "deleted", "BIT", false),
        createUser("CreateUser", "createUser", "VARCHAR", true),
        createTime("CreateTime", "createTime", "TIMESTAMP", false),
        updateUser("UpdateUser", "updateUser", "VARCHAR", false),
        updateTime("UpdateTime", "updateTime", "TIMESTAMP", false),
        detail("Detail", "detail", "LONGVARCHAR", false);

        private static final String BEGINNING_DELIMITER = "`";

        private static final String ENDING_DELIMITER = "`";

        private final String column;

        private final boolean isColumnNameDelimited;

        private final String javaProperty;

        private final String jdbcType;

        public String value() {
            return this.column;
        }

        public String getValue() {
            return this.column;
        }

        public String getJavaProperty() {
            return this.javaProperty;
        }

        public String getJdbcType() {
            return this.jdbcType;
        }

        Column(String column, String javaProperty, String jdbcType, boolean isColumnNameDelimited) {
            this.column = column;
            this.javaProperty = javaProperty;
            this.jdbcType = jdbcType;
            this.isColumnNameDelimited = isColumnNameDelimited;
        }

        public String desc() {
            return this.getEscapedColumnName() + " DESC";
        }

        public String asc() {
            return this.getEscapedColumnName() + " ASC";
        }

        public static Column[] excludes(Column ... excludes) {
            ArrayList<Column> columns = new ArrayList<>(Arrays.asList(Column.values()));
            if (excludes != null && excludes.length > 0) {
                columns.removeAll(new ArrayList<>(Arrays.asList(excludes)));
            }
            return columns.toArray(new Column[]{});
        }

        public String getEscapedColumnName() {
            if (this.isColumnNameDelimited) {
                return new StringBuilder().append(BEGINNING_DELIMITER).append(this.column).append(ENDING_DELIMITER).toString();
            } else {
                return this.column;
            }
        }

        public String getAliasedEscapedColumnName() {
            StringBuilder sb = new StringBuilder();
            sb.append("presalecoupon.");
            sb.append(this.getEscapedColumnName());
            sb.append(" as ");
            if (this.isColumnNameDelimited) {
                sb.append(BEGINNING_DELIMITER);
            }
            sb.append("presalecoupon_");
            sb.append(this.column);
            if (this.isColumnNameDelimited) {
                sb.append(BEGINNING_DELIMITER);
            }
            return sb.toString();
        }
    }
}